#include "../../include/server_handle.h"
/***************************************************
函数名:overlap
功能:重名用户检查
传入参数:struct message a
返回值:重名返回1，否则返回0
***************************************************/
int overlap(struct message a)
{
    LinkList L;
	L = clientlink->next;
	while(L != NULL)
	{
		if(my_strcmp(L->data.name,a.name) == 0)
		{
		    return 1;
		}
		else
		{
			L = L->next;
		}
	}
	return 0;
}

/***************************************************
函数名:server_login
功能:处理客户端登录
传入参数:struct message *a, clientinf *clientNode
返回值:无
***************************************************/
int server_login(struct message *a, clientinf *clientNode)
{
	int i;
	char buf[MAXLEN];
	i = login_check(a);
	if(i == 1)
	{
		printf("管理员admin登录成功!\n");
		my_strcpy((*a).msg,"hello,admin!");
		my_strcpy((*clientNode).name,(*a).name);
		insertend(clientlink,*clientNode);
		my_send((*clientNode).decr,a,sizeof(struct message),0);
	}
	else
	{
		if(i == 0)
		{
			printf("%s 登录成功!\n",(*a).name);
			memset((*a).msg,0,strlen((*a).msg));
			my_strcpy((*a).msg,"login,success!");
			my_strcpy((*clientNode).name,(*a).name);
			insertend(clientlink,*clientNode);
			my_send((*clientNode).decr,a,sizeof(struct message),0);
			
			LinkList L;
			L = clientlink;
			L=L->next;
			my_strcpy((*a).flag,"sermsg");
			sprintf((*a).msg,"欢迎 %s 进入聊天室!",(*a).name);
			//发送给所有的用户，xxx登录成功;
			while(L != NULL)
			{
				my_send(L->data.decr,a,sizeof(struct message),0);
				L = L->next;
			}
	    	}
		else
		{
			printf("%s 登录失败!\n",(*a).name);
			my_strcpy((*a).msg,"login,failure!");
			my_send((*clientNode).decr,a,sizeof(struct message),0);
		}
	}
}

/***************************************************
函数名:server_exit
功能:处理客户端与服务器断开连接
传入参数:struct message *a, clientinf *clientNode
返回值:无
***************************************************/
int server_exit(struct message *a, clientinf *clientNode)   
{
	LinkList L;
	L = clientlink->next;
	while(L != NULL)
	{
		if(L->data.decr == (*clientNode).decr)
		{						
			my_strcpy((*clientNode).name,L->data.name);
			break;
		}
		else
		{
			L = L->next;
		}
	}
	my_strcpy((*a).flag,"sermsg");
	printf("%s 离开聊天室\n",(*clientNode).name);
	deletelist(clientlink ,(*clientNode));
	L = clientlink;
	L=L->next;
	sprintf((*a).msg,"%s 离开聊天室",(*clientNode).name);
	while(L != NULL)
	{
		my_send(L->data.decr,a,sizeof(struct message),0);
		L = L->next;
	}
}

